package com.practice.J2E.Test;

import com.practice.J2E.DesignMode.strategy.Animal;
import com.practice.J2E.DesignMode.strategy.AnimalFactory;

/**
 * 设计模式测试类
 * @author kayn
 * @create 2023-09-08 下午 04:22
 */
public class DesignModeTest {

    /**
     * 一、创建型模式.
     * 提供实例化的方法，为适合的状况提供相应的对象创建方法
     * 工厂方法模式【Factory Method】
     * 抽象工厂模式【Abstract Factory】
     * 创建者模式【Builder】
     * 原型模式【Prototype】
     * 单例模式【Singleton】
     *
     * 二、结构型模式
     * 通常用来处理实体之间的关系，使得这些实体能够更好地协同工作
     * 外观模式【Facade】
     * 适配器模式【Adapter】
     * 代理模式【Proxy】
     * 装饰模式【Decorator】
     * 桥接模式【Bridge】
     * 组合模式【Composite】
     * 享元模式【Flyweight】
     *
     * 三、行为型模式
     * 用于在不同的实体间进行通信，为实体之间的通信提供更容易，更灵活的通信方法
     * 模板方法模式【Template Method】
     * 观察者模式【Observer】
     * 状态模式【State】
     * 策略模式【Strategy】
     * 职责链模式【Chain of Responsibility】
     * 命令模式【Command】
     * 访问者模式【Visitor】
     * 调停者模式【Mediator】
     * 备忘录模式【Memento】
     * 迭代器模式【Iterator】
     * 解释器模式【Interpreter】
     *
     * @param args
     */
    public static void main(String[] args) {

        //策略模式 Strategy
//        testStrategy();

        //单例模式 Singleton



    }



    /**
     * 测试策略模式
     */
    private static void testStrategy() {

        Animal cat = AnimalFactory.takeAnimalFromPool("cat");

        cat.speak();

        cat.walk();

        Animal dog = AnimalFactory.takeAnimalFromPool("dog");

        dog.speak();

        dog.walk();

    }
}
